EDA-1

Row

Data Table (Offensive Summary)

EDA-2

Row

Data Table (Betting Summary)

---
title: "NBA Betting Dashboard"
output: 
  flexdashboard::flex_dashboard:
    theme:
      version: 4
      bootswatch: default
      navbar-bg: "#3b5998"
    orientation: columns
    vertical_layout: fill
    source_code: embed
---
<style>
.chart-title 
  {  
    /* chart_title  */
    font-size: 18px;
    font-family: Arial;
  }
body
  {
      /* Normal  */
      font-size: 16px;
  }
</style>

```{r setup, include=FALSE}
library(flexdashboard)
```

```{r packages}
pacman::p_load(rvest, tidyverse, ggplot2, stringr, esquisse, plotly)
```

```{r scraping & cleaning (salary)}
link1 = "https://hoopshype.com/salaries/players/"
page1 = read_html(link1)

name = page1 %>%
  html_nodes("tbody .name") %>% html_text()
salary = page1 %>%
  html_nodes("tbody .hh-salaries-sorted") %>% html_text()

name <- gsub("\t", "", name)
name <- gsub("\n", "", name)

salary <- gsub("\n", "", salary)
salary <- gsub("\t", "", salary)
salary <- gsub("\\$", "", salary)
salary <- gsub(",", "", salary)

nba_salary <- data.frame(name, salary)

nba_salary$salary <- as.numeric(nba_salary$salary)
```

```{r scraping & cleaning (stats)}
nba_stats = data.frame()

for (pages in c(1,2,3)) 
  {
    link2 = paste0("https://basketball.realgm.com/nba/stats/2023/Averages/Qualified/points/All/desc/", pages, "/Regular_Season")  
    page2 = read_html(link2)
    
name = page2 %>% 
  html_nodes(".nowrap") %>% html_text()
    
team = page2 %>% 
  html_nodes(".nowrap+ td") %>% html_text()

gp = page2 %>% 
  html_nodes("td:nth-child(4)") %>% html_text()

mpg = page2 %>% 
  html_nodes("td:nth-child(5)") %>% html_text()

ppg = page2 %>% 
  html_nodes("td:nth-child(6)") %>% html_text()

fgm = page2 %>% 
  html_nodes("td:nth-child(7)") %>% html_text()

fga = page2 %>% 
  html_nodes("td:nth-child(8)") %>% html_text()

fgp = page2 %>% 
  html_nodes("td:nth-child(9)") %>% html_text()

tpm = page2 %>% 
  html_nodes("td:nth-child(10)") %>% html_text()

tpa = page2 %>% 
  html_nodes("td:nth-child(11)") %>% html_text()

tpp = page2 %>% 
  html_nodes("td:nth-child(12)") %>% html_text()

ftm = page2 %>% 
  html_nodes("td:nth-child(13)") %>% html_text()

fta = page2 %>% 
  html_nodes("td:nth-child(14)") %>% html_text()

ftp = page2 %>% 
  html_nodes("td:nth-child(15)") %>% html_text()

orb = page2 %>%
  html_nodes("td:nth-child(16)") %>% html_text()

drb = page2 %>%
  html_nodes("td:nth-child(17)") %>% html_text()

rpg = page2 %>%
  html_nodes("td:nth-child(18)") %>% html_text()

apg = page2 %>%
  html_nodes("td:nth-child(19)") %>% html_text()

spg = page2 %>%
  html_nodes("td:nth-child(20)") %>% html_text()

bpg = page2 %>%
  html_nodes("td:nth-child(21)") %>% html_text()

tov = page2 %>%
  html_nodes("td:nth-child(22)") %>% html_text()

pf = page2 %>%
  html_nodes("td:nth-child(23)") %>% html_text()

nba_stats <- rbind(nba_stats, as.data.frame(cbind(name, team, gp, ppg, fgm, fga, fgp, tpm, tpa, tpp, ftm, fta, ftp, orb, drb, rpg, apg, spg, bpg, tov, pf)))
  }

nba_stats <- nba_stats %>% mutate_at(c("ppg", "fgm", "fga", 
                                       "fgp", "tpm", "tpa", 
                                       "tpp", "ftm", "fta", 
                                       "ftp", "orb", "drb", 
                                       "rpg", "apg", "spg", 
                                       "bpg", "tov", "pf"), as.numeric)
```

```{r merge data}
nba <- left_join(nba_stats, nba_salary, by = "name")
nba$team <- as.factor(nba$team)
```

EDA-1
===

Row {data-width=650}
-----------------------------------------------------------------------

### Data Table (Offensive Summary)

```{r}
DT::datatable(nba, rownames = FALSE, 
              options = list(columnDefs = list(list(className = 'dt-center', targets = 1:21))))
```

EDA-2
===

Row {data-width=650}
-----------------------------------------------------------------------

### Data Table (Betting Summary)

```{r scraping & cleaning}
link3 = "https://www.covers.com/sport/basketball/nba/statistics/team-betting/2022-2023"
page3 = read_html(link3)

teamName = page3 %>%
  html_nodes("td:nth-child(2)") %>% html_text()

againstSpread = page3 %>%
  html_nodes("td:nth-child(3)") %>% html_text()

againstSpreadP = page3 %>%
  html_nodes("td:nth-child(4)") %>% html_text()

W_L = page3 %>%
  html_nodes("td:nth-child(5)") %>% html_text()

overUnder = page3 %>%
  html_nodes("td:nth-child(6)") %>% html_text()

pointsPerGame = page3 %>%
  html_nodes("td:nth-child(7)") %>% html_text()

pointsAgainst = page3 %>%
  html_nodes("td:nth-child(8)") %>% html_text()

pointMarginPerGame = page3 %>%
  html_nodes("td:nth-child(9)") %>% html_text()

teamName <- gsub(" ", "", teamName)
teamName <- gsub("\r", "", teamName)
teamName <- gsub("\n", "", teamName)

nba_bet <- as.data.frame(cbind(teamName, againstSpread, againstSpreadP, W_L, overUnder, pointsPerGame, pointsAgainst, pointMarginPerGame))
```

```{r data table 2}
DT::datatable(nba_bet, rownames = FALSE, 
              options = list(columnDefs = list(list(className = 'dt-center', targets = 1:7))))
```